import crypto from 'crypto';
import url from 'url';

/**
 * 获取签名
 * @param params 
 * @param appKey 
 * @returns 
 */
export function sign(params: url.URLSearchParams, appKey: string): string {
    // 将以 _w_ 作为前缀所有参数按 key 进行字典升序排列
    params.sort();
    let entries = params.entries();
    let baseString = '';
    // @ts-ignore
    for (let entry of entries) {
      baseString += entry[0] + '=' + entry[1];
    }
    // 将 _w_secretkey 加到最后，得到待加密的字符（_w_secretkey 只在签名时加入）
    baseString += '_w_secretkey=' + appKey;
    
    // 使用 HMAC-SHA1 哈希算法，使用注册的 appsecret 密钥对上一步骤的源字符串进行加密。
    const hmac = crypto.createHmac('sha1', appKey);
    hmac.update(baseString, 'utf8');

    // 将加密后的字符串经过 Base64 编码。
    return encodeURIComponent(hmac.digest('base64'));
}